<?php
header('Content-Type: application/json');

// 增强错误报告
error_reporting(E_ALL);
ini_set('display_errors', 1);

// 验证数据
$input = file_get_contents('php://input');
$data = json_decode($input, true);

if (json_last_error() !== JSON_ERROR_NONE || empty($data)) {
    http_response_code(400);
    die(json_encode([
        'error' => '无效数据',
        'debug' => [
            'input' => $input,
            'json_error' => json_last_error_msg()
        ]
    ]));
}

// 确保目录存在
$dir = __DIR__.'/../data';
if (!is_dir($dir)) {
    mkdir($dir, 0755, true);
}

$file = $dir.'/tags.json';
try {
    // 原子化写入
    $tempFile = tempnam($dir, 'TEMP_');
    file_put_contents($tempFile, json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE));
    
    // 验证写入内容
    $written = file_get_contents($tempFile);
    if (json_decode($written) === null) {
        throw new Exception('写入数据验证失败');
    }
    
    // 重命名操作（原子操作）
    if (!rename($tempFile, $file)) {
        throw new Exception('文件替换失败');
    }
    
    echo json_encode(['success' => true]);
} catch (Exception $e) {
    http_response_code(500);
    echo json_encode([
        'error' => '保存失败',
        'message' => $e->getMessage()
    ]);
    
    // 清理临时文件
    if (file_exists($tempFile)) {
        unlink($tempFile);
    }
}
?>